﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gustozzi.DAL;
using System.Text;
namespace WebGustozzi.ModuloVentas
{
    ///<summary>
    ///Nombre	    : wfAgregarProducto
    ///Descripción	: 
    ///               
    ///</summary>
    ///<remarks>
    ///Fecha        Moficado Por        Descripción
    ///07/02/2012   Tirso Villanueva    Versión inicial
    ///19/02/2012   Marco Pizarro	    Agregar validaciones iniciales
    ///</remarks>
    public partial class wfAgregarProducto : System.Web.UI.Page
    {
        #region "Variables"
        VentasDataEntities contexto = null;
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Inicializar();
            }
        }

        public void Inicializar()
        {
            divProducto.Visible = false;
            divPromocion.Visible = true;
            cargarCombos();

            //txtPreUnit.Attributes.Add("onblur", String.Format("return validaDecimal('{0}','{1}','{2}')", txtPreUnit.ClientID, "Agregar Producto", "Ingrese un valor válido para el precio unitario."));
            txtPreUnit.Attributes["onblur"] = String.Format("return validaDecimal('{0}','{1}','{2}')", txtPreUnit.ClientID, "Agregar Producto", "Ingrese un valor válido para el precio unitario.");
        }

        protected void imbAceptar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
            guardar();

            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }

        }

        protected void rblTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (rblTipo.SelectedValue == "1")
                {
                    divProducto.Visible = false;
                    divPromocion.Visible = true;
                }
                else
                {
                    divProducto.Visible = true;
                    divPromocion.Visible = false;

                }
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }


        public void cargarCombos()
        {

            if (contexto == null)
            {
                contexto = new VentasDataEntities();
            }

            var categorias = from p in contexto.CategoriasProductos
                             select new
                             {
                                 codigo = p.codigoCategoriaPdto,
                                 descripcion = p.descripcion
                             };
            ddlCategoria.DataSource = categorias;
            ddlCategoria.DataTextField = "descripcion";
            ddlCategoria.DataValueField = "codigo";
            ddlCategoria.DataBind();

            if (ddlCategoria.Items.Count >= 0)
            {
                ddlCategoria.SelectedIndex = 0;
            }

            var promociones = from p in contexto.Promociones
                              select new
                              {
                                  codigo = p.codigoPromocion,
                                  descripcion = p.descripcion
                              };
            ddlPromocion.DataSource = promociones;
            ddlPromocion.DataTextField = "descripcion";
            ddlPromocion.DataValueField = "codigo";
            ddlPromocion.DataBind();


            if (ddlPromocion.Items.Count >= 0)
            {
                ddlPromocion.SelectedIndex = 0;
            }

        }

        protected void ddlPromocion_SelectedIndexChanged(object sender, EventArgs e)
        {

            try
            {
                txtPreUnit.Text = string.Empty;
                txtCantidad.Text = string.Empty;
                txtTotal.Text = string.Empty;
                txtUnidad.Text = string.Empty;

                if (ddlPromocion.SelectedIndex >= 0)
                {
                    if (contexto == null)
                    {
                        contexto = new VentasDataEntities();
                    }

                    int idPromocion = Convert.ToInt32(ddlPromocion.SelectedValue);

                    Promocion promocion = (Promocion)(from p in contexto.Promociones
                                                      where p.codigoPromocion == idPromocion
                                                      select p).First();

                    if (promocion != null)
                    {
                        txtPreUnit.Text = promocion.precioTotal.ToString();
                        txtUnidad.Text = "UND";
                        txtCantidad.Text = "1";
                        calcularTotal();
                    }
                }
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        protected void txtCantidad_TextChanged(object sender, EventArgs e)
        {
            calcularTotal();
        }

        public void calcularTotal()
        {
            try
            {
                double cantidad = Convert.ToDouble(txtCantidad.Text);
                double precio = Convert.ToDouble(txtPreUnit.Text);
                txtTotal.Text = (cantidad * precio).ToString();
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        public void guardar() 
        {
            if (rblTipo.SelectedValue == "1")//Producto 
            {
                if (ddlProductoCategoria.SelectedIndex <= 0)
                {
                    throw new Exception("No ha seleccionado el producto");
                }
            }
            else 
            {
                if (ddlPromocion.SelectedIndex <= 0)
                {
                    throw new Exception("No ha seleccionado la promoción");
                }
            }
           

            List <ItemPedido> listadoPedido = null ;
            if (Session["listaProductos"] == null)
            {
                listadoPedido = new  List<ItemPedido> ();
            }
            else 
            {
                listadoPedido = (List<ItemPedido>)Session["listaProductos"];
            }

            double cantidad=Convert.ToDouble (txtCantidad.Text);
            double precioUnitario=Convert.ToDouble(txtPreUnit.Text);
            double montoTotal = Convert.ToDouble(txtTotal.Text);

            ItemPedido  oPedidoItem = new ItemPedido ();
            oPedidoItem.cantidad = cantidad;
            if(rblTipo.SelectedValue == "1")//Producto
            {
                int codigoProducto = Convert.ToInt32(ddlProductoCategoria.SelectedValue);
                oPedidoItem.codigoProducto = codigoProducto;
                oPedidoItem.nombreProducto = ddlProductoCategoria.SelectedItem.Text;
            }else
            {
                int codigoPromocion = Convert.ToInt32(ddlPromocion.SelectedValue);
                oPedidoItem.codigoPromocion = codigoPromocion;
                oPedidoItem.nombreProducto = ddlPromocion.SelectedItem.Text;
            }
            oPedidoItem.precioUnitario = precioUnitario;
            oPedidoItem.importe = montoTotal;

            hdfCantidadItems.Value = listadoPedido.Count.ToString();
            int numItems = 0;

            if (hdfCantidadItems.Value.Equals("0"))
            {
                Session["numItems"] = numItems++;
            }
            else 
            {
                numItems=Convert.ToInt32(Session["numItems"]);
                Session["numItems"] = numItems++;
            }

            oPedidoItem.codigoPedido  = 1;
            oPedidoItem.codigoPedidoDetalle = numItems;
            oPedidoItem.unidadMedida = txtUnidad.Text;
            listadoPedido.Add(oPedidoItem);

            Session["listaProductos"] = listadoPedido;

            ScriptManager sm = ScriptManager.GetCurrent(this.Page);
            bool ingreso = false;
            if (sm != null)
            {
                if (sm.IsInAsyncPostBack)
                {
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "cerrar", "window.close();", true);
                    ingreso = true;
                }
            }
            if (!ingreso)
            {
                this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "cerrar", "window.close();", true);

            }
        }

        protected void ddlCategoria_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (ddlCategoria.SelectedIndex > 0) 
                {
                    if (contexto == null) 
                    {
                        contexto = new VentasDataEntities();
                    }
                    int idCategoria = Convert.ToInt32 (ddlCategoria.SelectedValue);
                    var productos = (from p in contexto.Productos
                                      where p.codigoCategoriaPdto == idCategoria
                                      select new
                                      {
                                          codigo = p.codigoProducto,
                                          descripcion = p.descripcion
                                      });

                    ddlProductoCategoria.Items.Clear();
                    ddlProductoCategoria.Items.Add(new ListItem("--Seleccionar--", "0"));
                    ddlProductoCategoria.DataSource = productos;
                    ddlProductoCategoria.DataTextField = "descripcion";
                    ddlProductoCategoria.DataValueField = "codigo";
                    ddlProductoCategoria.DataBind();

                    if (ddlProductoCategoria.Items.Count > 0)
                    {
                        ddlProductoCategoria.SelectedIndex = 0;
                    }
                }
               
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        protected void ddlProductoCategoria_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                cargarDetalleProducto();
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }
        public void cargarDetalleProducto()
        {

            txtPreUnit.Text = string.Empty;
            txtCantidad.Text = string.Empty;
            txtTotal.Text = string.Empty;
            txtUnidad.Text = string.Empty;

            if (ddlProductoCategoria.SelectedIndex > 0)
            {
                if (contexto == null)
                {
                    contexto = new VentasDataEntities();
                }

                int idProducto = Convert.ToInt32(ddlProductoCategoria.SelectedValue);

                Producto producto = (Producto)(from p in contexto.Productos.Include("UnidadMedida")
                                               where p.codigoProducto == idProducto
                                               select p).First();

                if (producto != null)
                {
                    var lstListaPrecios = (from p in contexto.ListasPrecios
                                           orderby p.fechaUltActualiza
                                           where p.codigoProducto == idProducto
                                           select p);

                    if (lstListaPrecios != null)
                    {
                        if (lstListaPrecios.Count() > 0)
                        {
                            ListaPrecios olistaPrecios = (ListaPrecios)lstListaPrecios.First();
                            txtPreUnit.Text = olistaPrecios.precioVenta.ToString();
                            txtUnidad.Text = producto.UnidadMedida.descripcion;
                            txtCantidad.Text = "1";
                            calcularTotal();

                        }
                    }
                }
            }
        }

        protected void txtPreUnit_TextChanged(object sender, EventArgs e)
        {
            calcularTotal();
        }

    }
}